# 重定向指的是将当前路由指向新的路由，其目的在于关联不同的路由，例如关联登录界面和服务器后台
# 在进入服务器后台之前要走“登录”这一步操作，登录的目的就是为了限制一些没有“身份”的人登录和操作服务器
# 登录页面是服务器为了拦截非法访问所设置的一道“关卡”。
# 起初，二者之间是没有任何的联系，大家同为页面，彼此不认识谁，更不会存在相互制约的关系；
# 然而，在“程序员”这个“上帝意识”的有意“撮合”下，*两个页面之间* 之间催生了一种若有若无的内在联系：“登录”成了“主页面”的“必经之路”和“关口”。
# 本以为有了这层关系，所有人都能规规矩矩地乖乖走“登录”的程序，然而就有许多的“不法分子”偏偏不按套路出牌，一个个都抓住了“浏览器”的把柄
# 如果两个页面没有任何关联，就可以直接改变浏览器的路由去访问服务器后台
# 例如把 server_addr:22550/login 改成 server_addr:22550/root/main
# 由于网页是需要被访问的，因此无法通过隐藏路由的方式来避免这样的攻击
# 因此在这种时候就可以利用重定向来避免这种攻击。
# 具体做法就是设置一个是否已经登录的变量，如果没有这个变量，在访问主页的时候就重定向到登录页面

# 此外，旧网站重定向到新版网站等等用的都是重定向

# 对于flask而言，重定向可以重定向到互联网上别的网站，也可以重定向到自己写的其他的函数，本质上都是关联不同的url

import sys
from pathlib import Path
from flask import Flask, redirect, url_for


if __name__ == "__main__":
    sys.path.append(
        Path(__file__).absolute().parent.parent.__str__()
    )

from base_frame import Application


# 在flask中实现重定向需要给redirect函数传入字符串形式的url
# 对此，有两种方式实现，一种是针对互联网链接直接使用url，另一种是获得自己写的路由的url，获得字符串形式的自己写的路由的url，可以使用url_for来获取

@Application.app.route("/tobaidu")
def to_baidu():
    return redirect("https://www.baidu.com")


@Application.app.route("/hello")
def hello():
    return "<h1 align=\"center\">you've been redirect to hello</h1>"


@Application.app.route("/")
def root():
    return redirect(url_for("hello"))


if __name__ == "__main__":
    app = Application()
    app.start_app()